7

本地开发环境是影响工作效率最重要的因素(还有一个是IDE,以后有时间会专门写这个)

一般来说有以下几种方案可以选择

  • 原生安装 这个是最原始也是最麻烦的,比如搞PHP,要自己装nginx+php+mysql+redis 搞不好还得装个node、composer、memcached。这个搞法基本上熟练也得一天出去了。Mac还好,Windows就要无尽的google了。
  • 虚拟机 这个有两种方案,我都尝试过,一种是用VM,安个centos,这种方法和原生安装差不多,也比较折腾,另外VM虚拟机占用系统资源太大,每次开机都比较慢。另一种就是用vargrant,这个方法的好处是比较轻,开机快。但是终究是虚拟机,最大的问题就是目录共享问题,造成无法正常安装node,总之各种坑
  • Docker 最终选择了Docker的方案。Docker基本上是集合了上面的所有优点了,他自身最大的好处就是想用的时候拉起来,不想用的时候干掉,数据和容器是分开的。另外镜像都是官方的,稳定,靠谱。缺点也是有的,就是底层其实还是用的linux,所以在windows上跑不大稳定。

我目前用的方案是

centos7 官方镜像 里面安装了 nginx php node

mysql 官方镜像

redis 官方镜像

这样一共需要运行三个容器,数据都-v 到本地磁盘,容器干掉了数据也不丢失。

常用命令

镜像

搜索镜像

$ docker search xxx

如果出现 connection refused 可以试试重启docker

下载镜像

$ docker pull xxx

删除镜像

$ docker rmi xxx

本地容器保存快照 生成镜像压缩文件

$ docker export -o dev-latest.tar 7e4b0

导入镜像

$

保存镜像

$ docker save -o redis-latest.tar 9813

容器导入 是将当前容器 变成一个新的镜像
镜像导入 是复制的过程

save 保存镜像所有的信息-包含历史
export 只导出当前的信息

容器

查看当前运行的容器

$ docker ps
$ docker ps -a

$ docker stats

$ docker top

查看当前docker版本

$ docker info

运行容器

$ docker run -d [-p 主机端口:容器端口] --name [容器名自定义] [-v 主机/目录:容器/目录] [镜像名]

例如

centos

$ docker run -d -p 80:80 --name dev -v D:/docker/dev/www:/home/www centos

redis
$ docker run -d -p 6379:6379 --name dev-redis -v D:/docker/redis/data:/data redis

mysql

$ docker run --name dev-mysql -v D:/docker/mysql:/var/lib/mysql -p 3306:3306 -e MYSQL_ROOT_PASSWORD=111111 -d mysql

停止 开启 重启

$ docker stop
$ docker start
$ docker restart

删除容器

$ docker rm

如果有自己的仓库可以

$ docker login -u 用户名 -p 密码 仓库地址

进入容器

$ docker exec -it [容器名] /bin/bash

如果碰到开机报错:

Docker command did not complete within the allowed timeout. Output:

可能是windows 防火墙问题

在防火墙里放开下面这俩exe
C:\Program Files\Docker\Docker\Docker for Windows.exe
C:\Program Files\Docker\Docker\DockerCli.exe

PS 如果发现容器里面挂载的目录不见了
但是执行 docker inspect 发现这个配置其实是有的

那么 可能是挂载的主机磁盘没有写权限 改完后重启试试

容器间通信

默认可以用内网IP通信 网段是 172.17.0.1...

可以通过下面的命令查看容器IP

$ docker inspect --format='{{.NetworkSettings.IPAddress}}' CONTAINER_ID

这里注意 容器的IP是根据启动顺序来的,不是一直固定的,所以启动的时候最好有一定顺序,避免老去改配置的麻烦


煮茶
217 声望13 粉丝

PHP,Magento2,laravel